import Vue from 'vue'
import axios from 'axios'
import router from '../router/index.js'
import qs from 'qs'
import {
	Message
} from 'element-ui';
Vue.prototype.$message = Message

// 配置了两个拦截器
/* 拦截客户端请求的信息，在登录成功之后，服务端就会返回一个token，每一次请求都会携带token,即：
1、用户向服务器发送用户名和密码
2、验证服务器之后，会将当前信息(比如用户名，密码，登录时间等信息)保存在当前会话中
3、然后服务器会向用户返回一个session_id，session信息写入用户的cookie中
4、后续的请求，用户都会先从cookie中取出这个session_id一并发送到服务器
5、服务器收到之后，通过比对这个session_id之前保存的数据，确认用户的身份
*/
axios.defaults.baseURL = 'http://192.168.10.6:7050' //正式服务器

// 定义一个拦截器，自动将请求拦截下来，自动往请求里面加一个参数
axios.interceptors.request.use(config => {
	return config
}, err => {
	Message.error('请求超时')
	return Promise.resolve(err)
})
// 拦截服务端响应的信息
axios.interceptors.response.use(data => {
	if (data.status && data.status === 200 && data.data.code !== 0) {
		Message.error(data.data.msg)
		if (data.data.code === 600) { //token过期未登录
			setTimeout(() => {
				router.replace({
					path: '/login',
					query: {},
				})
			}, 1000)
		}
		return
	}
	// 返回方法调用的那里，拿到的就是服务端返回的数据
	if (data.data) {
		return data.data
	}
}, err => {
	// 如果HTTP响应码是400,500等就会进入这个err函数
	// 如果服务器没启动或者是路径错误进入此判断中
	if (err.response.status === 504 || err.response.status === 404) {
		Message.error('服务器连接失败')
	} else if (err.response.status === 403) { // 表示权限不足
		Message.error('权限不足，请联系管理员')
	} else if (err.response.status === 401) { // 表示未登录
		Message.error(err.response.data.msg) // 服务器返回信息
	} else {
		if (err.response.data.msg) {
			Message.error(err.response.data.msg)
		} else {
			Message.error('未知错误')
		}
	}
})
// 登录接口
export const postKeyValueRequest = (url, params) => {
	return axios({
		method: 'post',
		url: `${url}`, // url的拼接，base是定义的前缀
		data: params,
		transformRequest: [function (data) {
			let ret = ''
			for (let it in data) {
				ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
			}
			return ret
		}],
		headers: {
			'Content-Type': 'application/x-www-form-urlencoded'
		}
	})
}
// get请求接口
export const getRequest = (url, params) => {
	let paramStr = ''
	for (let key of Object.keys(params)) {
		let name = params[key];
		if (paramStr === '') {
			paramStr += key + '=' + name
		} else {
			paramStr += '&' + key + '=' + name
		}
	}
	return axios({
		method: 'get',
		url: `${url}` + '?' + paramStr
	})
}
// post请求接口
export const postRequest = (url, params) => {
	return axios({
		method: 'post',
		url: `${url}`,
		data: qs.stringify(params),
		headers: {
			'Content-Type': 'application/x-www-form-urlencoded'
		}
	})
}
// 文件上传接口
export const uploadFileRequest = (url, params) => {
	return axios({
		method: 'post',
		url: `${url}`,
		data: params,
		headers: {
			'Content-Type': 'multipart/form-data'
		}
	})
}


export default {
	getRequest,
	postRequest,
	uploadFileRequest,
	postKeyValueRequest
};
